star_plain

6818视频传输开发记录

6818搭建视频服务器

本篇记录在 GEC6818(ARM)开发板上,使用免驱 USB 摄像头 + WiFi,搭建实时视频流服务器的过程。

基础准备

硬件

网络

正式开始

PC 端:交叉编译

1. 获取源码

# 下载 mjpg-streamer
git clone https://github.com/jacksonliam/mjpg-streamer.git
# 下载 libjpeg-turbo 图像库
wget https://downloads.sourceforge.net/project/libjpeg-turbo/2.1.5/libjpeg-turbo-2.1.5.tar.gz

2. 编译 libjpeg-turbo(ARM 版)

tar xzvf libjpeg-turbo-2.1.5.tar.gz
cd libjpeg-turbo-2.1.5
mkdir _install build_arm
cd build_arm

cmake .. \
  -DCMAKE_SYSTEM_NAME=Linux \
  -DCMAKE_SYSTEM_PROCESSOR=arm \
  -DCMAKE_C_COMPILER=arm-linux-gcc \
  -DCMAKE_INSTALL_PREFIX=../_install \
  -DENABLE_STATIC=OFF \
  -DENABLE_SHARED=ON \
  -DWITH_JPEG8=OFF   # 必须关闭,生成 libjpeg.so.62

make -j4
make install

编译完成后检查库文件:

cd ../_install/lib
ls -l

3. 编译 mjpg-streamer

进入目录

cd ../../../mjpg-streamer/mjpg-streamer-experimental/

修改:plugins/input_uvc/CMakeLists.txt

check_include_files(linux/videodev2.h HAVE_LINUX_VIDEODEV2_H)

MJPG_STREAMER_PLUGIN_OPTION(input_uvc "Video 4 Linux input plugin"
                            ONLYIF HAVE_LINUX_VIDEODEV2_H)

if (PLUGIN_INPUT_UVC)
    
    add_definitions(-DLINUX -D_GNU_SOURCE)
    
    # --- 修改开始 ---
    # 1. 强制指定你的 JPEG 库路径 (请确保这个路径和你编译 libjpeg-turbo 时的路径一致)
    SET(JPEG_ROOT "/mnt/d/XXXXXXXXXX/libjpeg-turbo-2.1.5/_install")
    
    # 2. 添加头文件路径
    include_directories(${JPEG_ROOT}/include)
    
    # 3. 添加库文件路径
    link_directories(${JPEG_ROOT}/lib)
    
    # 4. 强制指定库文件名字 (直接找 libjpeg.so 或 libjpeg.a)
    SET(JPEG_LIB "jpeg") 
    # --- 修改结束 ---
    
    find_library(V4L2_LIB v4l2)
    # 删除
    # find_library(JPEG_LIB jpeg)
    if (V4L2_LIB)
        add_definitions(-DUSE_LIBV4L2)
    endif (V4L2_LIB)
    # 删除
    # if (NOT JPEG_LIB)
    #    add_definitions(-DNO_LIBJPEG)
    # endif (NOT JPEG_LIB)
    
    MJPG_STREAMER_PLUGIN_COMPILE(input_uvc dynctrl.c
                                           input_uvc.c
                                           jpeg_utils.c
                                           v4l2uvc.c)
    
    if (V4L2_LIB)
        target_link_libraries(input_uvc ${V4L2_LIB})
    endif (V4L2_LIB)
    
    if (JPEG_LIB)
        target_link_libraries(input_uvc ${JPEG_LIB})
    endif (JPEG_LIB)

endif()

开始编译:

make CC=arm-linux-gcc

4. 打包需要传输到开发板的文件

# 回到项目根目录,创建tftp文件夹
mkdir mjpg_tftpboot

# 复制主程序
cp mjpg-streamer/mjpg-streamer-experimental/_build/mjpg_streamer mjpg_tftpboot/

# 复制插件
cp mjpg-streamer/mjpg-streamer-experimental/_build/plugins/input_uvc/input_uvc.so mjpg_tftpboot/
cp mjpg-streamer/mjpg-streamer-experimental/_build/plugins/output_http/output_http.so mjpg_tftpboot/

# 复制库文件(只复制实体文件!)
cp libjpeg-turbo-2.1.5/_install/lib/libjpeg.so.62.3.0 mjpg_tftpboot/

# 打包网页文件
cd mjpg-streamer
tar -czvf www.tar.gz www/
cp www.tar.gz ../../mjpg_tftpboot/


# 【弃用,不需要这一步】备用jpge库,从这里下载
https://packages.debian.org/bullseye/armhf/libjpeg62-turbo/download?spm=5176.28103460.0.0.96a07551Yl93v1

dpkg -x libjpeg62-turbo_2.0.6-4_armhf.deb ./jpeg_extract

开发板端部署

1. 创建目录

mkdir -p /root/mjpg-streamer/www
cd /root/mjpg-streamer

2. 通过 TFTP 获取文件

# 传输PC端编写好的文件到开发板
tftp -g -r mjpg_streamer PC端IP
tftp -g -r input_uvc.so PC端IP
tftp -g -r output_http.so PC端IP
tftp -g -r www.tar.gz PC端IP
tftp -g -r libjpeg.so.62.3.0 PC端IP

3. 解压网页文件

tar -xzvf www.tar.gz

4. 创建库软链接

ln -s libjpeg.so.62.3.0 libjpeg.so.62
ln -s libjpeg.so.62 libjpeg.so

5. 创建启动脚本 start_monitor.sh

#!/bin/sh
# GEC6818 MJPG-Streamer Monitor Script
# Description: Starts MJPG-Streamer with USB Camera
# Author: GEC6818 Development Team

# Configuration
CAMERA_DEV="/dev/video7"
RESOLUTION="640x480"
FRAME_RATE="30"
HTTP_PORT="8080"
WWW_DIR="/root/mjpg-streamer/www"

# Check if camera device exists
if [ ! -c $CAMERA_DEV ]; then
    echo "Error: Camera device $CAMERA_DEV not found!"
    exit 1
fi

# Check if mjpg_streamer exists
if [ ! -f "/root/mjpg-streamer/mjpg_streamer" ]; then
    echo "Error: mjpg_streamer not found!"
    exit 1
fi

# Start MJPG-Streamer
echo "Starting GEC6818 Monitor System..."
echo "----------------------------------------"
echo "Camera: $CAMERA_DEV"
echo "Resolution: $RESOLUTION @ $FRAME_RATE FPS"
echo "HTTP Port: $HTTP_PORT"
echo "----------------------------------------"
cd /root/mjpg-streamer
export LD_LIBRARY_PATH=/root/mjpg-streamer:$LD_LIBRARY_PATH

./mjpg_streamer \
    -i "./input_uvc.so -d $CAMERA_DEV -r $RESOLUTION -f $FRAME_RATE" \
    -o "./output_http.so -w $WWW_DIR -p $HTTP_PORT"i

6. 运行

chmod +x ./*
chmod 755 libjpeg.so.62.3.0
./start_monitor.sh

访问视频流

浏览器打开

http://开发板IP:8080